#include <my_header.h>
/* Usage: ./07_完全无关版ls指令  pathname*/
int main(int argc,char *argv[])
{   
    //判断输入的指令数
    ARGS_CHECK(argc,2);
    //打开目录流
    DIR * dirp = opendir(argv[1]);
    //错误处理判断
    ERROR_CHECK(dirp, NULL, "opendir");
    //创建一个指针用来指向目录流结构体
    //用来读取结构体的内容
    struct  dirent *pdirent;
    long loc;
    //while循环读取并打印目录信息，循环结束的条件是返回值为NULL
    while((pdirent = readdir(dirp)) != NULL){
        printf("inode Num = %lu"
               "reclen = %hu"
               "type = %u"
               "name = %s\n",
               pdirent->d_ino,
               pdirent->d_reclen,
               pdirent->d_type,
               pdirent->d_name
              );
        if(strcmp(".",pdirent->d_name) == 0){
            loc = telldir(dirp);
        }
    }
    printf("----------------------------\n");
    /*
     *此时telldir记录的是目标
     *对应名字的下一个文件
     *对于在这个目录下面，要找dirtest文件
     *就需要寻找名字为 . 的这个隐藏文件
     *因为他在此文件目录下排在dirtest前面一个位置
     *只有找 . 这个文件才可以真确输出dirtest信息
     *
     * */
    seekdir(dirp,loc);
    pdirent = readdir(dirp);
    printf("inode Num = %lu"
           "reclen = %hu"
           "type = %u"
           "name = %s\n",
           pdirent->d_ino,
           pdirent->d_reclen,
           pdirent->d_type,
           pdirent->d_name
          );
    //打印完成及时关闭目录流
    closedir(dirp);

    return 0;
}

/*
 * 除了 seekdir和telldir外还有rewinddir
 *  rewinddir作用是将目录流指针重置到目录流开始位置
 *  类似于文件流里面的rewind函数
 *  声明如下：
 *  void rewinddir(DIR *dirp)
 *  没有返回值 使得目录流回到最初始位置
 *  这样下一次调用resddir将返回目录中的第一个条目
 * */
